/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gov.mtc.dgac.licencias.persistence;

import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import pe.gov.mtc.dgac.licencias.bean.AuditoriaProcedimientoTO;
import pe.gov.mtc.dgac.licencias.bean.ProcedimientoTO;
import pe.gov.mtc.dgac.licencias.bean.ProcesoTO;
import pe.gov.mtc.dgac.licencias.util.Utiles;

/**
 *
 * @author elvis
 */
@Repository
public class AuditoriaProcedimientohibDAO extends HibernateDaoSupport implements AuditoriaProcedimientoDAO{

    private final static Logger logger = Logger.getLogger(AuditoriaProcedimientohibDAO.class);
    
    @Autowired
    public AuditoriaProcedimientohibDAO(SessionFactory sessionFactory){
         setHibernateTemplate( new HibernateTemplate(sessionFactory));
    }
    
    public List<AuditoriaProcedimientoTO> listarAuditProc(Integer auditoria, Integer procedimiento) {
        DetachedCriteria criteria = DetachedCriteria.forClass(AuditoriaProcedimientoTO.class);
        logger.debug("listarAuditProc()");
        if( !Utiles.nullToBlank( auditoria ).equals("0")){
             criteria.add( Restrictions.eq("auditoriaTO.codAuditoria", new Long(auditoria) )) ;
        }
        if( !Utiles.nullToBlank( procedimiento ).equals("0")){
             criteria.add( Restrictions.eq("procedimientoTO.codProcedimiento", new Long(procedimiento) ));
        }
        return getHibernateTemplate().findByCriteria(criteria);
    }

    public void registrarAudtProc(AuditoriaProcedimientoTO auditproc) {
        this.getHibernateTemplate().saveOrUpdate(auditproc);
    }

    public AuditoriaProcedimientoTO obtenerAuditProc(Integer auditoria, Integer procedimiento) {
        logger.debug("AUd = "+auditoria+"  PRoCe="+ procedimiento);
        Query query = getSession().createQuery(" from AuditoriaProcedimientoTO a where auditoriaTO.codAuditoria = :id and procedimientoTO.codProcedimiento= :id2 ")
        .setInteger("id", auditoria)
        .setInteger("id2", procedimiento);
        return (AuditoriaProcedimientoTO) query.uniqueResult();
    }

    public void eliminarAuditProc(Integer auditoria, Integer procedimiento) {
        logger.debug("Aud = " + auditoria + "; Proc = " + procedimiento);
        getSession().createQuery(" delete from  AuditoriaProcedimientoTO where auditoriaTO.codAuditoria = :id and procedimientoTO.codProcedimiento= :id2  ")
        .setInteger("id", auditoria)
        .setInteger("id2", procedimiento)
        .executeUpdate();
    }

    public List<ProcedimientoTO> listarProdedimientos(int proceso) {
        return getSession().createQuery(" from  ProcedimientoTO where codProceso.codProceso = :id  ")
        .setInteger("id", proceso)
        .list();
    }

    public List<ProcesoTO> listarProcesos() {
        return getSession().createQuery("  from  ProcesoTO  ")
        .list();
    }

}
